package org.sam.beatles.utils;

import org.springframework.context.ApplicationEvent;

/**
 * spring 工具助手
 * 
 * @author sam
 *
 */
public interface BeanUtil {

	/**
	 * 根据实体名称获取bean的实例
	 * 
	 * @param <T>
	 * @param entityName
	 * @return
	 */
	public <T> T getBean(String entityName);

	/**
	 * 动态注册bean到系统里
	 * 
	 * @param name 自定义名称
	 * @param bean 被注册对象
	 * @return
	 */
	public boolean registerBean(String name, Object bean);

	/**
	 * 动态注册bean到系统里 使用首字母小写的方式
	 * 
	 * @param bean 被注册对象
	 * @return
	 */
	public boolean registerBean(Object bean);

	/**
	 * 通过名称取消bean注册
	 * 
	 * @param name bean名称
	 * @return
	 */
	public boolean removeBean(String name);

	/**
	 * 通过bean对象取消bean注册
	 * 
	 * @param bean
	 * @return
	 */
	public boolean removeBean(Object bean);

	/**
	 * 自动扫描注册bean
	 * 
	 * @param obj
	 */
	public void scanForAutoWired(Object obj);

	/**
	 * 发布事件
	 * 
	 * @param event
	 */
	public void publishEvent(ApplicationEvent event);

}